<?php
/*
需求：当用户花费余额少于10元时提醒其充值，当大于10元少于1000元时给其拨打电话推荐包月套餐，当前大于1000时给其推荐金融产品
*/
header("Content-type:text/html;Charset=utf-8");

//抽象状态类:
abstract class State{
    protected $balance; //余额
    abstract function recommend(); //推荐

}
//具体状态类，屌丝类（少于10元）
class DiaosiState extends State{
    //提醒或者推荐
    function recommend(){
        echo "别撸啦，停机了女神电话就打不进来拉，赶快充值";
    }
}
//具体状态类，中产类（多于10元，少于1000）
class ZhongchanState extends State{
    //提醒或者推荐
    function recommend(){
        echo "4G套餐不错哦,妈妈再也不用担心我的话费用不完啦";
    }
}
//具体状态类，土豪类（多于1000）
class TuhaoState extends State{
    //提醒或者推荐
    function recommend(){
        echo "e租宝不错哦，人傻钱多速来";
    }
}

//应用环境类，简单的理解为调用环境就可以了   1、统一由环境类来负责状态之间的转换
class Context{
    private $state;
    function setState($balance){
         if($balance<10){
              $this->state = new DiaosiState();
         }else if($balance>1000){
              $this->state = new TuhaoState();
         }else{
              $this->state = new ZhongchanState();
         }
    }
    function recommend(){
        $this->state->recommend();
    }
}

//测试
$context = new Context();
$context->setState(100);
$context->recommend();
 ?>